Immeasurable gains in technology offered in personal computers "PCs") have allowed PCs to assume roles performed only by mainframe or minicomputers in the past. Many companies and individual users rely solely on commercially available PCs to meet their information processing needs. Thus, it is vital that their PCs perform reliably. If, however, a PC experiences a fault, it is equally vital that the PC communicate existence of the fault to inform the user of a need to repair the fault so the PC can return to active service.
For computer systems in general, it is most helpful for the computer system to provide an indication of the specific location and nature of the fault to help the user to more quickly isolate and more economically repair the fault. To that end, current PCs are typically equipped with some form of internal diagnostics, the purpose of which is detection and subsequent isolation of component faults within the PC architecture.
Diagnostic routines consist of a series of instructions executed by the central processing unit ("CPU") within the computer system to allow self diagnosis. For years, computers have been provided with diagnostic routines that test and report on the operational status or functionality of components within the computer, allowing an interested party to repair or replace components that are not functioning to the desired degree.
Diagnostic code is sometimes stored on disk and retrieved therefrom for execution by the CPU (so called disk based diagnostics). One advantage of disk based diagnostics is that disks provides a relatively large area in which to store code, allowing diagnostic routines to be relatively sophisticated and thorough in their testing and reporting. Unfortunately, diagnostic routines are frequently invoked when components in the computer are not completely functional. To successfully retrieve and execute disk based diagnostics, the following components must be fully functional: CPU, address and data buses, bus controller, disk drive controller and disk drive. If any significant information is to be relayed back to the user, a display device or a printer and their associated interface hardware must also be fully functional. It is apparent therefore that if any one of these components is not fully functional, the diagnostics may not execute or interact with the user properly.
One solution to the above noted problem with disk based diagnostics was provided in part by embedding diagnostic code in solid state, non volatile memory within the computer. Thus, read only memory ("ROM"), for instance, was employed to store diagnostic code as firmware. One type of embedded diagnostics is power on self test ("POST") diagnostics, generally stored in basic input output system ("BIOS") ROM in PCs. POST is a series of tests that the computer performs on its components each time the computer is turned on. POST begins by reading system configuration information that has either been hard wired or stored in non volatile memory. It then checks random access memory ("RAM") by writing to and reading from the RAM to ensure proper operation. POST next examines the disk drives to confirm that they match the system configuration information. Lastly, POST initiates the loading of the operating system, "booting" the computer. Failure during execution of POST isolates the fault area for proper diagnosis. Each phase of the POST routine involves a check of the computer systems major components: the memory, hard disk drive, diskette drive.
In contrast to disk based diagnostics, embedded (or ROM based) diagnostics require the following components to function: CPU, address and data buses, bus controller and keyboard. Again, if any significant information is to be relayed back to the user, a display device or printer and associated interface hardware must also be fully functional. Although ROM based diagnostics are typically required to fit within a smaller space and therefore do not have the luxury of being as thorough in testing as disk based diagnostics, it is apparent that fewer components need be functional to successfully retrieve and execute embedded diagnostics.
Because embedded diagnostic routines are forced to fit within the confines of non volatile memory, those routines must be more compact and thus generally less thorough in their testing than disk based diagnostic routines. To economize on space, embedded diagnostics usually take advantage of BIOS operating system hardware handling routines already stored in ROM, thus eliminating duplication.
Should the user be fortunate enough to have the system up and running at the time when a fault occurs, prior art disk based diagnostics provide an invaluable tool for analyzing computer system faults. However, should a fault render the computer system unable to initialize (or "boot"), there are currently no disk based diagnostic routines capable of executing within a non bootable system to diagnose the fault (a so called "non bootable fault"). This is because today's disk based diagnostic routines operate in conjunction with the computer system's operating system, making calls to its library of hardware handling routines. And, as previously described, today's disk based diagnostic routines require a large portion of the computer system to function, thus limiting their use when fundamental system faults occur.
Thus, disk-based diagnostics are completely inadequate and ineffective unless a large percentage of system components are fully functional, which is rarely the case during a system fault. Disk-based diagnostics are therefore not going to have much chance of detecting real world faults, as the vast majority of faults prevent the PC from booting and there are no means of targeting those faults.
There therefore exists a need in the art for relatively large and detailed non disk based diagnostic routines that provide a means for isolating and diagnosing non bootable component faults within a computer system, the diagnostic routines still able to fit within the confines of non volatile memory.
There further exists a need in the art for diagnostics which are independent of the computer's underlying operating system, permitting the diagnostics to perform system component initialization without use of BIOS hardware handling routines.